import cv2
import time

cap = cv2.VideoCapture(0)


def face_detection(img):
    classifier = cv2.CascadeClassifier("./haarcascades/haarcascade_frontalface_alt2.xml")
    faces = classifier.detectMultiScale(
        image=img,
        scaleFactor=1.2,
        minNeighbors=5,
        flags=0,
        minSize=[50, 50],
        maxSize=[200, 200]
    )

    # for face in faces:
    #     x, y, w, h = face
    #     cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)

    # 当且仅当图像中有一张人脸的时候，可以保存图片。
    status = False
    if len(faces) == 1:
        status = True
    return status


while True:
    flags, frame = cap.read()
    if flags is False:
        print("摄像头获取图像失败")
        break
    status = face_detection(frame)
    cv2.imshow("frame", frame)
    # 根据键盘按键停止摄像头
    if cv2.waitKey(4) == ord(" "):
        break
    # 保存图片到本地
    elif cv2.waitKey(4) == ord("s"):
        if status:
            # 保存并写入到对应的目录
            # 图片格式：唯一的id.名称.png
            cv2.imwrite(f"./users/{time.strftime('%H%M%S')}.shen.png", frame)
            print(f"./users/{time.strftime('%H%M%S')}.shen.png 保存成功")
        else:
            print("当前图像不合法，请重新拍照!")

# 释放摄像头资源
cap.release()
# 关闭所有窗口
cv2.destroyAllWindows()
